from abc import ABC, abstractmethod
from typing import List, Optional
from src.domain.email_pending_task import EmailPendingTask

class EmailPendingTaskRepository(ABC):
    """Repository interface for email pending task operations"""
    
    @abstractmethod
    def save(self, email_pending_task: EmailPendingTask) -> int:
        """Save an email pending task and return the ID"""
        pass
    
    @abstractmethod
    def find_by_id(self, task_id: int) -> Optional[EmailPendingTask]:
        """Find an email pending task by ID"""
        pass
    
    @abstractmethod
    def find_by_email_id(self, email_id: str) -> List[EmailPendingTask]:
        """Find email pending tasks by email_id"""
        pass
    
    @abstractmethod
    def find_by_task_id(self, task_id: str) -> Optional[EmailPendingTask]:
        """Find an email pending task by task_id"""
        pass